package itheima01;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * @author Xiao
 * @date 2021/7/28
 */
@SuppressWarnings("all")
public class StreamDemo02 {
    /**
     * 	Stream<T> filter(Predicate predicate)：用于对流中的数据进行过滤
     * （Predicate接口中的方法：boolean test(T t)：对给定的参数进行判断，返回一个布尔值）；
     *
     * 	Stream<T> limit(long maxSize)：截取指定参数个数的数据；
     * 	Stream<T> skip(long n)：跳过指定参数个数的数据；
     * 	static<T> Stream<T> concat(Stream a, Stream b)：合并a和b两个流为一个流；
     * 	Stream<T> distinct()：去除流中重复的元素（依赖hashCode和equals方法）。
     */
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(List.of(
                "张三丰", "张无忌", "张翠山", "王二麻子", "张良", "谢广坤"));
        list.stream().filter(s -> s.length() == 2).forEach(s -> System.out.println(s)); //[张良]
        list.stream().limit(2).forEach(s -> System.out.println(s)); //[张三丰, 张无忌]
        list.stream().skip(2).forEach(s -> System.out.println(s));  //[张翠山, 王二麻子, 张良, 谢广坤]
        ArrayList<String> list1 = new ArrayList<>(List.of("Hello"));
        ArrayList<String> list2 = new ArrayList<>(List.of("World"));
        Stream.concat(list1.stream(), list2.stream()).forEach(s -> System.out.println(s));  //[Hello, World]
        ArrayList<String> list3 = new ArrayList<>(List.of("阿良","阿良","阿良"));
        list.stream().distinct().forEach(s -> System.out.println(s));   //[阿良]
    }
    /*list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张");
            }
        });*/
    //因为Predicate接口中只有一个抽象方法test，
    // 所以可以使用Lambda表达式进行简化
}
